package com.abc.smg;

public class CalculatorStaticProxy implements Calculator{

    //将代理的目标对象声明为成员变量
    private Calculator target;

    public CalculatorStaticProxy(Calculator target) {
        this.target = target;
    }

    @Override
    public int add(int i, int j) {
        // 附加功能由代理类中的代理方法来实现
        System.out.println("[日志] add 方法开始了，参数是：" + i + "," + j);
        int result=target.add(i,j);
        System.out.println("[日志] add 方法结束了，结果是：" + result);
        return result;
    }

    @Override
    public int sub(int i, int j) {
        System.out.println("[日志] sub 方法开始了，参数是：" + i + "," + j);
        int result=target.sub(i,j);
        System.out.println("[日志] sub 方法结束了，结果是：" + result);
        return result;
    }

    @Override
    public int mul(int i, int j) {
        System.out.println("[日志] mul 方法开始了，参数是：" + i + "," + j);
        int result=target.mul(i,j);
        System.out.println("[日志] mul 方法结束了，结果是：" + result);
        return result;
    }

    @Override
    public double div(int i, int j) {
        double result=0.0;
        try {
            /*前置通知*/
            System.out.println("[日志] div 方法开始了，参数是：" + i + "," + j);
            result=target.div(i,j);
            /*后置通知*/
            System.out.println("[日志] div 方法结束了，结果是：" + result);

        } catch (Exception e) {
            /*异常通知*/
            //e.printStackTrace();
            System.out.println("[日志] 异常：除数不能为0");
        } finally {
            /*返回通知*/
            return result;
        }
    }
}
